﻿#pragma once

#include "../MonsterObject.h"
#include "../../MirDatabase/MonsterInfo.h"
#include "../PlayerObject.h"
#include "../../../Shared/Enums.h"
#include "../../../Shared/Data/ItemData.h"
#include <limits>
#include "exceptionhelper.h"

using namespace Server::MirDatabase;
namespace S = ServerPackets;

namespace Server::MirObjects::Monsters
{
    class Guard : public MonsterObject
    {
    public:
        bool getBlocking() const override;

    protected:
        bool getCanMove() const override;

        bool getCanRegen() const override;

        Guard(MonsterInfo *info);
    public:
        void Spawned() override;



    protected:
        bool InAttackRange() override;

        void ProcessRegen() override;
        void ProcessRoam() override;

    public:
        bool IsAttackTarget(PlayerObject *attacker) override;
        bool IsAttackTarget(MonsterObject *attacker) override;
        int Attacked(PlayerObject *attacker, int damage, DefenceType type = DefenceType::ACAgility, bool damageWeapon = true) override;
        int Attacked(MonsterObject *attacker, int damage, DefenceType type = DefenceType::ACAgility) override;
        int Struck(int damage, DefenceType type = DefenceType::ACAgility) override;
    protected:
        bool DropItem(UserItem *item) override;
        bool DropGold(unsigned int gold) override;
    public:
        void Die() override;

    protected:
        void Attack() override;
    };
}
